package com.mikao.service;

import com.mikao.dto.bo.*;
import com.mikao.dto.vo.*;
import com.mikao.entity.Ticket;

import java.util.Date;
import java.util.List;

/**
 * @author kenny
 */
public interface GoodsService {

    /**
     * 商品列表
     *
     * @param createTime 时间
     * @param size       条数
     * @param type       类型
     * @param order      排序
     * @param from       来源
     * @return list
     */
    BaseResult<List<GoodsDto>> goodsList(Date createTime, int size, Long type, String order, Integer from);

    /**
     * 商品详情页
     *
     * @param id id
     * @return 商品详情
     */
    BaseResult<GoodsDetailDto> goodsDetail(Long id);

    /**
     * 加入购物车
     *
     * @param userId  用户id
     * @param carForm 商品
     * @return 封装类
     */
    BaseResult addCar(Long userId, CarForm carForm);

    /**
     * 用户积分与积分商城列表
     *
     * @param userId id
     * @return 封装类
     */
    BaseResult<UserPointGoodsDto> pointGoodsList(Long userId);

    /**
     * 获取优惠券列表
     *
     * @param userId 用户ID
     * @return list
     */
    BaseResult<List<TicketDto>> ticketList(Long userId, Boolean status);

    /**
     * 确认下单界面
     *
     * @param userId 用户ID
     * @param id     商品ID
     * @return 封装
     */
    BaseResult<SureOrderDto> sureOrder(Long userId, Long id);

    /**
     * 提交订单界面（用户还未付款） 生成待付款订单
     *
     * @param submitOrderForm 提交订单
     * @param userId          用户ID
     * @return 封装类
     */
    BaseResult submitOrder(Long userId, SubmitOrderForm submitOrderForm);

    /**
     * 提交兑换积分商品订单
     *
     * @param userId          用户ID
     * @param submitPointForm 提交表单
     * @return 封装类
     */
    BaseResult submitPoint(Long userId, SubmitPointForm submitPointForm);

    /**
     * 移除购物车商品
     *
     * @param carForm 购物车表单
     * @return 封装类
     */
    BaseResult removeCar(Long userId, CarForm carForm);

    /**
     * 优惠券列表
     *
     * @return list
     */
    BaseResult<List<TicketDto>> ticket();

    /**
     * 购物车列表
     *
     * @param userId 用户ID
     * @return list
     */
    BaseResult<List<CarDto>> carList(Long userId);

    /**
     * 折扣列表
     *
     * @param createTime 时间
     * @param size       条数
     * @return list
     */
    BaseResult<List<DiscountDto>> dicountList(Date createTime, int size);

    /**
     * 取消订单
     *
     * @param deleteOrderForm 订单表
     * @return 封装类
     */
    BaseResult deleteOrder(DeleteOrderForm deleteOrderForm);

    /**
     * 评价
     *
     * @param evaluateForm 评价表单
     * @param userId       id
     * @return 封装类
     */
    BaseResult evaluate(Long userId, EvaluateForm evaluateForm);

    /**
     * 微信回调业务处理
     *
     * @param out_trade_no 订单号
     * @param total_amount 支付金额
     */
    void doWxTrade(String out_trade_no, String total_amount);

    /**
     * 处理微信树苗支付后回调
     *
     * @param out_trade_no
     * @param total_amount
     */
    void doWxTreeTrade(String out_trade_no, String total_amount);

    /**
     * 好评列表
     *
     * @param createTime
     * @param size
     * @param goodsId
     * @return
     */
    BaseResult<EvaluateDtos> evaluateList(Date createTime, int size, Long goodsId);

    /**
     * 商城首页搜索
     *
     * @param name
     * @param createTime
     * @param size
     * @return
     */
    BaseResult<List<GoodsSeach>> searchGoods(String name, Date createTime, int size);

    void doAliTrade(String out_trade_no, String total_amount);
}
